const watermark = {};
let onListen = false;
let setIntervalTime = null;
let waterStr = '';

// 自定义水印样式
let config = {};
// 水印容器定义
let containerConfig = {};

function clearIntervalTimeAll() {
  if(setIntervalTime) {
    clearInterval(setIntervalTime);
    setIntervalTime = null;
  }
}


const setWatermark = (str, container) => {
  const id = '1.23452384164.123412415';
  if (container === undefined) {
    return;
  }

  // 查看页面上有没有，如果有则删除
  if (document.getElementById(id) !== null) {
    const childelement = document.getElementById(id);
    childelement.parentNode.removeChild(childelement);
  }
  var containerWidth = container.offsetWidth; // 获取父容器宽
  var containerHeight = container.offsetHeight; // 获取父容器高
  container.style.position = 'relative'; // 设置布局为相对布局
  // 创建canvas元素(先制作一块背景图)
  const can = document.createElement('canvas');
  can.width =  config.width || 300; // 设置每一块的宽度
  can.height = config.height || 300; // 高度
  const cans = can.getContext('2d'); // 获取canvas画布
  let rotate = -20;
  if(config.rotate || config.rotate === 0) {
    rotate = Number(config.rotate);
  }
  cans.rotate((rotate * Math.PI) / 180); // 逆时针旋转π/9
  cans.font =  config.font || '24px Vedana'; // 设置字体
  cans.fillStyle = config.color || 'rgba(0, 0, 0, 0.1)'; // 设置字体的颜色
  cans.textAlign = config.textAlign || 'left'; // 文本对齐方式
  cans.textBaseline = 'Middle'; // 文本基线
  cans.fillText(str, 0, (4 * can.height) / 5); // 绘制文字
  // 创建一个div元素
  const div = document.createElement('div');
  div.id = id; // 设置id
  div.style.pointerEvents = 'none'; // 取消所有事件
  div.style.top = containerConfig.top || '0px';
  div.style.left = containerConfig.left || '0px';
  div.style.position = 'absolute';
  div.style.zIndex = containerConfig.zIndex || '100000';
  div.style.width = containerConfig.width || containerWidth + 'px';
  div.style.height = containerConfig.height || containerHeight + 'px';
  div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
  div.style.boxSizing = 'border-box';
  container.appendChild(div); // 追加到页面
  return id;
};

/**
 * 自定义插入dom， 可以重新跟新水印
 * @param {string} str  - 水印文字(*必填项)
 * @param {Document} container - 水印块容器(*必填项)
 * @param {object} _config  - 水印块配置
 * @param {object} container_config - 水印块容器配置
 */
watermark.set = (str, container, _config = {}, container_config= {}) => {
  config = _config;
  containerConfig = container_config;
  waterStr = str;
  let id = setWatermark(waterStr, container);
  // 清除存在的定时任务，在重新跑新的str水印
  clearIntervalTimeAll();
  setIntervalTime = setInterval(() => {
    if (document.getElementById(id) === null) {

      id = setWatermark(waterStr, container);
    }else {
      // 已添加水印，清除定时任务；
      clearIntervalTimeAll();
    }
  }, 500);

  // 监听页面大小的变化
  if(!onListen) {
    window.onresize = () => {
      onListen  = true;
      setWatermark(waterStr, container);
    };
  }
  
};

// 直接调用，在budy中插入， 此方法只调用一次，用于全页面同一个水印, str不包含时间；

/**
 * 添加水印
 * @param {String} str  - 水印文字
 */
watermark.addWatermark = (str) => {
  waterStr = str;
  
  containerConfig =  {
   
    height: 'calc(100vh - 16px)'
  };

  let id = setWatermark(waterStr, document.body);
  // 清除存在的定时任务，在重新跑新的str水印
  clearIntervalTimeAll();
  setInterval(() => {
    if (document.getElementById(id) === null) {
      
      containerConfig =  {
      
        height: 'calc(100vh - 16px)'
      };

      id = setWatermark(waterStr, document.body);
    } else {
      // 已添加水印，清除定时任务；
      clearIntervalTimeAll();
    }
  }, 500);

  // 监听页面大小的变化
  if (!onListen) {
    window.onresize = () => {
      onListen = true;
      setWatermark(waterStr, document.body);
    };
  }
};

export default watermark;
